package com.chengliang.zuoye.service.impl;

import com.chengliang.zuoye.bean.Menu;
import com.chengliang.zuoye.mapper.MenuMapper;
import com.chengliang.zuoye.service.MenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @Author chengliang
 * @Date 2019-06-17 20:33
 * @Description //TODO
 */
@Service
public class MenuServiceImpl implements MenuService {

    private final MenuMapper menuMapper;

    @Autowired
    public MenuServiceImpl(MenuMapper menuMapper) {
        this.menuMapper = menuMapper;
    }

    /**
     * @return
     */
    @Override
    public List<Menu> oneMenuList() {
        return menuMapper.oneMenuList();
    }

    /**
     * 根据ID修改菜单状态
     *
     * @param id     菜单ID
     * @param status 状态值
     * @return 是否操作成功
     */
    @Override
    public boolean changeStatus(Integer id, Boolean status) {
        return menuMapper.changeStatus(id,status);
    }

    /**
     * 通过角色ID查询该角色拥有的一级菜单ID
     * @param roleId 角色ID
     * @return
     *  菜单ID的集合
     */
    @Override
    public List<Integer> getOneMenuListByRoleId(Integer roleId) {
        return menuMapper.selectOneMenuByRoleId(roleId);
    }

    /**
     * 通过角色ID查询该角色拥有的二级菜单ID
     * @param roleId 角色ID
     * @return
     *  菜单ID的集合
     */
    @Override
    public List<Integer> getTwoMenuListByRoleId(Integer roleId) {
        return menuMapper.selectTwoMenuByRoleId(roleId);
    }

    /**
     * @return
     */
    @Override
    public List<Menu> menuList() {
        return menuMapper.menuList();
    }

    /**
     * 根据ID删除单个菜单
     * 如果是父级菜单则将所有的子菜单设置为父级菜单
     * @param menuId 菜单ID
     * @return 是否操作成功
     */
    @Override
    @Transactional(timeout=1000,rollbackFor=Exception.class)
    public boolean dropMenuById(Integer menuId) {
        menuMapper.updateMenuParentIdById(menuId);
        return menuMapper.deleteByPrimaryKey(menuId)>0;
    }

    /**
     * 获取所有启用的父级菜单
     *
     * @return
     */
    @Override
    public List<Menu> onlyOneMenuList() {
        return menuMapper.onlyOneMenuList();
    }

    /**
     * 添加菜单
     * @param menu
     * @return
     */
    @Override
    public boolean saveMenu(Menu menu) {
        if(menu==null){
            return false;
        }
        if(menu.getParentId()==null){
            menu.setParentId(0);
        }
        return menuMapper.addMenu(menu);
    }

    /**
     * 根据菜单ID获取菜单信息
     *
     * @param id 菜单ID
     * @return 菜单信息 Memu
     */
    @Override
    public Menu getMenuById(Integer id) {
        return menuMapper.selectByPrimaryKey(id);
    }

    /**
     * 根据ID主键修改 菜单信息
     *
     * @param menu 菜单信息
     * @return 操作是否成功
     */
    @Override
    public boolean updateMenuById(Menu menu) {
        if(menu==null){
            return false;
        }
        if(menu.getParentId()==null){
            menu.setParentId(0);
        }
        return menuMapper.updateByPrimaryKey(menu)>0;
    }
}
